package cn.good.yan.stream6;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 6.StreamAPI 和 - Optional
 *
 * @author shengren.yan
 * @create 2023-05-03
 */
public class StreamTest {
    // StreamAPI测试
    public static void main(String[] args) {

        List<Integer> lsit1 = Arrays.asList(1, 3, 4, 6, 2);

        // takeWhile 从开头开始获取满足的元素，直到不满足为止
        List<Integer> c1 = lsit1.stream().takeWhile(x -> x < 3).collect(Collectors.toList());
        System.out.println(c1); // 结果是 3

        // dropWhile 与takeWhile相反，取出不满足的，直到满足为止
        List<Integer> c2 = lsit1.stream().dropWhile(x -> x < 3).collect(Collectors.toList());
        System.out.println(c2); // 结果是 3

        // ofNullable
        Stream<Object> o1 = Stream.ofNullable(null);
        long count = o1.count(); // 结果是0  不会出现异常
        System.out.println(count);

        // iterate 重载迭代
        System.out.println("-----");
        Stream.iterate(0, x -> x + 1).limit(5).forEach(System.out::println);
        System.out.println("----- 与上一个结果一致，写法变了，参数2 变成条件筛选");
        Stream.iterate(0, x -> x < 5, x -> x + 1).forEach(System.out::println);


        // Optional测试---
        System.out.println("---Optional测试--");
//        List<Integer> lsit1 = Arrays.asList(1, 3, 4, 6, 2);
        long op1 = Optional.ofNullable(lsit1).stream().count();
        System.out.println(op1); // 结果是1 ，把Optional里的对象里的内容当做一个对象
        long op2 = Optional.ofNullable(lsit1).stream().flatMap(x->x.stream()).count();
        System.out.println(op2); // 结果是5,  得到Optional里的List对象里的个数
    }

    // Optional测试
    public static void main2(String[] args) {

        List<Integer> lsit1 = Arrays.asList(1, 3, 4, 6, 2);
        long op1 = Optional.ofNullable(lsit1).stream().count();
        System.out.println(op1); // 结果是1 ，把Optional里的对象里的内容当做一个对象
        long op2 = Optional.ofNullable(lsit1).stream().flatMap(x->x.stream()).count();
        System.out.println(op2); // 结果是5,  得到Optional里的List对象里的个数
    }
}
